package cn.com.easy.permission.model;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import cn.com.easy.persistence.BaseEntity;
import cn.com.easy.utils.JacksonJsonDateSerializer;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * 系统用户表
 * 
 * @author nibili 2014-12-17
 */
@Entity
@Table(name = "pf_md_user")
@DynamicInsert
@DynamicUpdate
public class UserModel extends BaseEntity {

	private static final long serialVersionUID = -1977822635862846088L;

	/** 状态：禁用 */
	public final static int STATUS_LOCKED = 0;
	/** 　状态：正常 */
	public final static int STATUS_NORMAL = 1;

	/** login name. */
	@Column(nullable = false, unique = true)
	private String loginname;
	/** password. */
	@Column(nullable = false)
	private String password;
	/** real name */
	private String realname;
	/** telephone num */
	private String tel;
	/** email */
	private String email;
	/** 禁用 或者 正常 */
	@Column(nullable = false)
	private int status = STATUS_NORMAL;
	/** 备注 */
	private String mark;
	/** 最后登录时间 */
	private Date lastLoginTime;
	/** 登录ip */
	private String loginIp;
	/** 是否超级管理员 */
	private Boolean isAdmin = false;
	/** 角色表 */
	@Transient
	private List<RoleModel> roles;

	public UserModel() {
	}

	/**
	 * 是否启用
	 * 
	 * @return
	 * @auth nibili 2015年12月12日 上午1:54:19
	 */
	public boolean isEnable() {
		return this.status == STATUS_NORMAL;
	}

	/**
	 * 状态文本
	 * 
	 * @return
	 * @author nibili 2015年12月8日
	 */
	public String getStatusString() {
		if (this.status == STATUS_LOCKED) {
			return "禁用";
		} else if (this.status == STATUS_NORMAL) {
			return "正常";
		} else {
			return "";
		}
	}

	/**
	 * 获取 角色表
	 * 
	 * @return
	 * @auth nibili 2015年9月16日 下午9:18:50
	 */
	public List<RoleModel> getRoles() {
		return roles;
	}

	/**
	 * 设置 角色表
	 * 
	 * @param roles
	 * @auth nibili 2015年9月16日 下午9:18:50
	 */
	public void setRoles(List<RoleModel> roles) {
		this.roles = roles;
	}

	/**
	 * 获取 最后登录时间
	 * 
	 * @return
	 * @auth nibili 2015年9月15日 下午3:31:32
	 */
	@JsonSerialize(using = JacksonJsonDateSerializer.class)
	public Date getLastLoginTime() {
		return lastLoginTime;
	}

	/**
	 * 设置 最后登录时间
	 * 
	 * @param lastLoginTime
	 * @auth nibili 2015年9月15日 下午3:31:32
	 */

	public void setLastLoginTime(Date lastLoginTime) {
		this.lastLoginTime = lastLoginTime;
	}

	/**
	 * 获取 登录ip
	 * 
	 * @return
	 * @auth nibili 2015年9月15日 下午3:31:32
	 */
	public String getLoginIp() {
		return loginIp;
	}

	/**
	 * 设置 登录ip
	 * 
	 * @param loginIp
	 * @auth nibili 2015年9月15日 下午3:31:32
	 */
	public void setLoginIp(String loginIp) {
		this.loginIp = loginIp;
	}

	/**
	 * get realname
	 * 
	 * @return
	 * @auth nibili 2015-2-2 12:14:49
	 */
	public String getRealname() {
		return realname;
	}

	/**
	 * set realname
	 * 
	 * @param realname
	 * @auth nibili 2015-2-2 12:14:49
	 */
	public void setRealname(String realname) {
		this.realname = realname;
	}

	/**
	 * get password.
	 * 
	 * @return
	 * @auth nibili 2015-2-2 12:14:49
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * set password.
	 * 
	 * @param password
	 *            .
	 * @auth nibili 2015-2-2 12:14:49
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * get telephonenum
	 * 
	 * @return
	 * @auth nibili 2015-2-3
	 */
	public String getTel() {
		return tel;
	}

	/**
	 * set telephonenum
	 * 
	 * @param telephonenum
	 * @auth nibili 2015-2-3
	 */
	public void setTel(String tel) {
		this.tel = tel;
	}

	/**
	 * get email
	 * 
	 * @return
	 * @auth nibili 2015-2-3
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * set email
	 * 
	 * @param email
	 * @auth nibili 2015-2-3
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * get loginname
	 * 
	 * @return
	 * @auth nibili 2015-2-3
	 */
	public String getLoginname() {
		return loginname;
	}

	/**
	 * set loginname
	 * 
	 * @param loginname
	 * @auth nibili 2015-2-3
	 */
	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}

	/**
	 * 获取 status
	 * 
	 * @return
	 * @auth nibili 2015年4月21日 下午10:42:38
	 */
	public int getStatus() {
		return status;
	}

	/**
	 * 设置 status
	 * 
	 * @param status
	 * @auth nibili 2015年4月21日 下午10:42:38
	 */
	public void setStatus(int status) {
		this.status = status;
	}

	/**
	 * 获取 mark
	 * 
	 * @return
	 * @auth nibili 2015年4月21日 下午11:20:43
	 */
	public String getMark() {
		return mark;
	}

	/**
	 * 设置 mark
	 * 
	 * @param mark
	 * @auth nibili 2015年4月21日 下午11:20:43
	 */
	public void setMark(String mark) {
		this.mark = mark;
	}

	/**
	 * 获取 isAdmin
	 * 
	 * @return
	 * @auth nibili 2015年9月15日 下午4:58:12
	 */
	public Boolean getIsAdmin() {
		return isAdmin;
	}

	/**
	 * 设置 isAdmin
	 * 
	 * @param isAdmin
	 * @auth nibili 2015年9月15日 下午4:58:12
	 */
	public void setIsAdmin(Boolean isAdmin) {
		this.isAdmin = isAdmin;
	}

}
